import unittest
import requests
from api.login import LoginAPI
# 定义一个登录模块测试用例类
class TestLogin(unittest.TestCase):
    # 每个测试用例执行之前 都先做 数据初始化
    def setUp(self):
        self.api = LoginAPI() # 创建一个 执行 接口请求的 实例
        self.session = requests.Session() # 创建一个请求session 保证验证码 和 登录请求 在一个会话里

    # 1、执行登录成功测试用例
    def test01_login_success(self):
        # 执行 验证码接口请求操作 并返回响应  赋值给r
        r = self.api.do_verify(self.session)

        # 根据结果写断言 预期结果与 响应结果是一致 1、验证码返回的状态码 做断言 2、对返回 类型做断言
        self.assertEqual(200,r.status_code)
        self.assertIn("image",r.headers.get("Content-Type"))

        # 2、登录 测试数据
        data = {
            "username":'15226155565',
            "password":'15226155565',
            "verify_code":'8888'
        }

        r = self.api.do_login(self.session,data)

        # 断言 1、响应状态码断言 2、返回内容，status值 3、返回的内容 msg值
        self.assertEqual(200,r.status_code)
        self.assertEqual(1,r.json().get("status"))
        self.assertEqual("登录成功",r.json().get("msg"))

    def text02_login_username(self):
        # 1、先请求 验证码
        r = self.api.do_verify(self.session)

        # 写断言 1、验证码返回的状态码 做断言 2、对返回 类型做断言
        self.assertEqual(200,r.status_code)
        self.assertIn("image",r.headers.get("Content-Type"))

        # 2、做登录
        data = {
            "password":'15226155565',
            "verify_code":'8888'
        }
        r = self.api.do_login(self.session,data)

        # 做断言 1、响应状态码断言 2、返回的内容，status值 3返回的内容msg
        self.assertEqual(200,r.status_code)
        self.assertEqual(-2,r.json().get("status"))
        self.assertEqual("密码错误",r.json().get("msg"))